// #include "../common/common.hpp"
// #include <iostream>
// #include <thread>
// #include "../headers/test_pcl.h"

// // 投影点云到图像平面
// std::vector<cv::Point2f> projectPointCloudToImage(const pcl::PointCloud<pcl::PointXYZ>::Ptr& cloud, const cv::Mat& K) {
//     std::vector<cv::Point2f> imagePoints;
//     for (const auto& point : cloud->points) {
//         // if (point.z <= 0) continue; // 忽略在相机后面的点

//         // 投影3D点到2D平面
//         cv::Point2f imagePoint;
//         imagePoint.x = (K.at<double>(0, 0) * point.x / point.z) + K.at<double>(0, 2);
//         imagePoint.y = (K.at<double>(1, 1) * point.y / point.z) + K.at<double>(1, 2);
//         imagePoints.push_back(imagePoint);
//     }
//     return imagePoints;
// }
// pcl::visualization::PCLVisualizer::Ptr
// simpleVis(pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)
// {
// 	// --------------------------------------------
// 	// -----Open 3D viewer and add point cloud-----
// 	// --------------------------------------------
// 	pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
// 	viewer->setBackgroundColor(0, 0, 0);
// 	viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");
// 	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
// 	//viewer->addCoordinateSystem (1.0, "global");
// 	viewer->initCameraParameters();
// 	return (viewer);
// }
// int main(int argc, char** argv){
//     cv::Mat img=cv::imread("D:/project/vsTYtest/dog.jpg");
//     std::cout<<"run"<<std::endl;
//     // 检查图片是否成功读取
//     if (img.empty()) {
//         std::cerr << "Error: Loading image" << std::endl;
//         return -1;
//     }

//     // 创建窗口并显示图片
//     cv::namedWindow("Image Display", cv::WINDOW_FREERATIO);
//     cv::imshow("Image Display", img);

//     // 等待按键事件，之后关闭窗口
//     cv::waitKey(1);
//     // cv::destroyAllWindows();
	
// 	// 初始化点云
// 	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	

// 	// //圆形点云
// 	// // 设置点云的大小
//     // cloud->width = 500; // 点的数量
//     // cloud->height = 1;
//     // cloud->is_dense = false;
//     // cloud->points.resize(cloud->width * cloud->height);
// 	// // 球的半径
//     // float radius = 100.0f;
//     // // 填充点云
//     // for (pcl::index_t i = 0; i < static_cast<pcl::index_t>(cloud->size()); ++i) {
//     //     float phi = static_cast<float>(rand()) / RAND_MAX * 2 * M_PI; // 随机生成的 phi 角
//     //     float costheta = static_cast<float>(rand()) / RAND_MAX * 2 - 1; // 随机生成的 cos(theta)
//     //     float u = static_cast<float>(rand()) / RAND_MAX; // 随机生成的 u 用于随机化半径

//     //     float theta = acos(costheta);
//     //     float r = radius * cbrt(u); // 随机化的半径

//     //     (*cloud)[i].x = r * sin(theta) * cos(phi);
//     //     (*cloud)[i].y = r * sin(theta) * sin(phi);
//     //     (*cloud)[i].z = r * cos(theta);
//     // }

// 	// 立方体点云
//     // 设置点云的大小
//     cloud->width = 500; // 点的数量
//     cloud->height = 1;
//     cloud->is_dense = false;
//     cloud->points.resize(cloud->width * cloud->height);
//     // 立方体的边长
//     float sideLength = 200.0f;
//     // 填充点云
//     for (pcl::index_t i = 0; i < static_cast<pcl::index_t>(cloud->size()); ++i) {
//         (*cloud)[i].x = sideLength * (static_cast<float>(rand()) / RAND_MAX - 0.5f);
//         (*cloud)[i].y = sideLength * (static_cast<float>(rand()) / RAND_MAX - 0.5f);
//         (*cloud)[i].z = sideLength * (static_cast<float>(rand()) / RAND_MAX - 0.5f);
//     }

//     // // 创建可视化对象并添加点云
//     // pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
//     // viewer->setBackgroundColor(0, 0, 0);
//     // viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");
//     // viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
//     // viewer->addCoordinateSystem(1.0);
//     // viewer->initCameraParameters();

//     // // 显示点云
//     // while (!viewer->wasStopped()) {
//     //     viewer->spinOnce(100);
//     //     std::this_thread::sleep_for(std::chrono::milliseconds(100));
//     // }


// 	cv::Mat image=img.clone();
// 	// 相机内参矩阵
//     cv::Mat K = (cv::Mat_<double>(3, 3) << 
//         10, 0, image.cols / 2, 
//         0, 10, image.rows / 2, 
//         0, 0, 1); // 示例内参，请根据实际情况修改
// 	// cv::Mat K = (cv::Mat_<double>(3, 3) << 
//     //     100, 0, 0, 
//     //     0, 100, 0, 
//     //     0, 0, 1); // 示例内参，请根据实际情况修改
//     // 投影点云到图像平面
//     std::vector<cv::Point2f> imagePoints = projectPointCloudToImage(cloud, K);

//     // 在图像上绘制投影点
//     for (const auto& pt : imagePoints) {
//         if (pt.x >= 0 && pt.x < image.cols && pt.y >= 0 && pt.y < image.rows) { // 检查点是否在图像范围内
//             cv::circle(image, pt, 2, cv::Scalar(255, 0, 0), 10); // 绿色小圆点
//         }
//     }

//     // 显示结果
// 	// 创建窗口并显示图片
//     cv::namedWindow("Image with Point Cloud", cv::WINDOW_FREERATIO);
// 	cv::resizeWindow("Image with Point Cloud", 800, 600);  // 调整窗口大小
//     cv::imshow("Image with Point Cloud", image);
//     cv::waitKey(0);

// 	return 0;
// }

